package org.zhuzx.util;

import java.util.function.BinaryOperator;

/**
 * lambda对象常量集
 * @author zhuzx 2022/8/31
 */
public class LambdaConstants {

	/**
	 * 已移动到{@link ExceptionUtil#neverHappen()}<br>
	 * 用于表示一种不可能发生的情况，作为分支的一个声明，明确和强调永远不会进入此分支。<br>
	 * 本该在任何时候都不会触发执行，若实际运行过程中进入了此方法，必定是代码编写有误，既非脏数据也不是外部因素。
	 */
	@Deprecated
	public static void neverHappen() {
		throw new IllegalStateException("程序逻辑与业务意图相悖，无法继续往下执行。");
	}

	/** 语义同{@link java.util.stream.Collectors#throwingMerger()} */
	public static <T> BinaryOperator<T> neverHappenMerger() {
		return neverHappenMerger("键");
	}

	/**
	 * 语义同{@link java.util.stream.Collectors#throwingMerger()}<br>
	 * @param itemDesc 键的类型的描述短语
	 */
	public static <T> BinaryOperator<T> neverHappenMerger(String itemDesc) {
		return (u,v) -> {
			ExceptionUtil.neverHappen("出现了不该发生的" + itemDesc + "重复（Map键冲突）：" + u);
			return null;
		};
	}

	/**
	 * 合并器——取第一个，对于收集器的toMap来说，是取旧值，也就是先进入map的值。
	 */
	public static <T> BinaryOperator<T> takeTheFirstMerger() {
		return (u,v) -> u;
	}

}
